function alpha = power_allocation(channel_gain_near, channel_gain_far)
% power_allocation - 计算NOMA系统中的功率分配系数
%
% 输入参数:
%   channel_gain_near - 近用户的信道增益
%   channel_gain_far  - 远用户的信道增益
%
% 输出参数:
%   alpha - 功率分配系数向量，alpha(1)为近用户，alpha(2)为远用户

% NOMA中，信道条件较差的用户（远用户）分配更多的发送功率
% 这样远用户可以直接解码自己的信号，而近用户可以先解码远用户的信号后再解码自己的

% 检查信道增益是否符合NOMA场景（近用户信道增益应大于远用户）
if channel_gain_near <= channel_gain_far
    warning('近用户的信道增益应大于远用户，当前设置可能不适合NOMA场景');
end

% 计算信道增益比
gain_ratio = channel_gain_near / channel_gain_far;

% 根据信道增益比确定功率分配
% 信道增益差异越大，远用户分配的功率比例可以越小
% 信道增益差异小，远用户需要更多功率确保成功解码
if gain_ratio > 8  % 信道增益差异很大
    alpha_far = 0.8;  % 远用户分配80%的功率
    alpha_near = 1 - alpha_far;  % 近用户分配剩余功率
elseif gain_ratio > 4  % 信道增益差异中等
    alpha_far = 0.7;
    alpha_near = 1 - alpha_far;
else  % 信道增益差异小
    alpha_far = 0.6;
    alpha_near = 1 - alpha_far;
end

% 也可以使用基于信息论的方法计算最优功率分配
% 这里使用简化的启发式方法

% 返回功率分配系数
alpha = [alpha_near, alpha_far];

% 检查总功率是否为1
assert(abs(sum(alpha) - 1) < 1e-10, '功率分配系数和应为1');

end 